package com.qd.hik.dto.bag;

import lombok.Data;
import lombok.experimental.Accessors;

import java.util.List;

/**
 * 〈一句话功能简述〉<br>
 *
 * @author sjk
 * @create 2024-05-30 11:29
 * @since 1.0.0
 */
@Data
@Accessors(chain = true)
public class HkRecordsResp {
    private List<Results> results;

    public void freeData() {
        if (results != null) {
            results.forEach(Results::freeData);
        }
    }

    @Data
    @Accessors(chain = true)
    static class Results {
        /**
         * 包期凭证 code
         */
        private Integer certCode;
        /**
         * 包期状态 1-生效中，2-取消中(正在退款)，3-已退款，4-已过期，5-申请审核中，6-审核通过，待支付，7-审核被拒绝；当支付后办理未成功，处于退款状态，平台回下true  1
         * 发一个其他值，
         * 客户端展示和
         * （已退款）样式
         * 保持一致，具体
         * bagStateText
         * 下台下发
         */
        private Integer bagState;
        /**
         * 包期状态描述信息
         */
        private String bagStateText;
        /**
         * 展示时间，客户端直接展示，无需拼接，开始时间还未开始,下发“开始时间 2021/12/23 ”；否则下发“到期时间 2021/10/12”
         */
        private String validTime;
        /**
         * 到期描述（即将到期时下发），如剩余3天
         */
        private String comingDueDesc;
        /**
         * 是否可取消，0-否，1-是
         */
        private Integer cancelable;
        /**
         * 是否可续期，0-否，1-是
         */
        private Integer renewable;
        /**
         * 是否能再次办理（0-否，1-是）
         */
        private Integer rebagable;
        /**
         * 是否是本人办理 0-否 1-是
         */
        private Integer bagMyself;
        /**
         * 停车点信息
         */
        private List<ParkInfos> parkInfos;
        /**
         * 车牌信息
         */
        private List<PlateInfos> plateInfos;

        public void freeData() {
            this.certCode = null;
            this.bagState = null;
            this.bagStateText = null;
            this.validTime = null;
            this.comingDueDesc = null;
            this.cancelable = null;
            this.renewable = null;
            this.rebagable = null;
            this.bagMyself = null;
            if (parkInfos != null) {
                parkInfos.forEach(ParkInfos::freeData);
            }
            if (plateInfos != null) {
                plateInfos.forEach(PlateInfos::freeData);
            }
        }
    }

    @Data
    @Accessors(chain = true)
    static class ParkInfos {
        /**
         * 停车场 ID
         */
        private Integer parkId;
        /**
         * 停车场名称
         */
        private String parkName;

        public void freeData() {
            this.parkId = null;
            this.parkName = null;
        }
    }

    @Data
    @Accessors(chain = true)
    static class PlateInfos {
        /**
         * 包期车牌
         */
        private String plateNo;
        /**
         * 格式化的车牌号码，用于展示
         */
        private String formatPlateNo;
        /**
         * 车牌颜色
         */
        private Integer plateColor;

        public void freeData() {
            this.plateNo = null;
            this.formatPlateNo = null;
            this.plateColor = null;
        }
    }
}